/**
 * Definition for singly-linked list.
 * function ListNode(val, next) {
 *     this.val = (val===undefined ? 0 : val)
 *     this.next = (next===undefined ? null : next)
 * }
 */
/**
 * @param {ListNode} head
 * @return {ListNode}
 * @description 循环遍历两次，一次拿到链表长度，一次拿中间值
 */

var middleNode = function (head) {
    // 保存头节点
    let cur = head
    // 计链表总长度
    let num = 0
    // 记录答案 中间节点
    let res
    // 循环遍历 计算总长度
    while (cur) {
        cur = cur.next
        num++
    }
    // 计算中间值
    let mid = Math.floor(num / 2) + 1
    // 重新定位cur指向head
    cur = head
    // 拿到中间节点
    while (--mid && cur) {
        cur = cur.next
    }
    res = cur
    return res
};